//using System;
//using System.Collections;
//using System.Collections.Generic;
//using HWGames.Bundles.HWIAP;
//using QFramework;
//using UnityEngine;
//using UnityEngine.Purchasing;

//namespace HareGame
//{
//    [MonoSingletonPath("GameEntry/IAPManager")]
//    public class IAPManager : MonoBehaviour_Ex, ISingleton
//    {
//        [SerializeField]
//        private List<IAPData> IAPList = new List<IAPData>();

//        /// <summary>
//        /// 初始化
//        /// </summary>
//        public void OnSingletonInit()
//        {
//            AddProduct();
//            HWIAPManager.Instance.InitSuccessEvent += OnInitSuccessEvent;
//            HWIAPManager.Instance.PurchaseStateChangeEvent += OnPurchaseStateChangeEvent;
//            HWIAPManager.Instance.PurchasePendingEvent += OnPurchasePendingEvent;
//            HWIAPManager.Instance.PurchaseSuccessEvent += OnPurchaseSuccessEvent;
//            HWIAPManager.Instance.PurchaseFailedEvent += OnPurchaseFailedEvent;
//            HWIAPManager.Instance.PurchaseRewardUserEvent += OnPurchaseRewardUserEvent;
//            HWIAPManager.Instance.PurchaseRestoreResultEvent += OnPurchaseRestoreResultEvent;
//        }

//        /// <summary>
//        /// 定义单例
//        /// </summary>
//        public static IAPManager Instance
//        {
//            get { return MonoSingletonProperty<IAPManager>.Instance; }
//        }

//        protected override void DoEvent(EventID eventID, params object[] param)
//        {
//            base.DoEvent(eventID, param);
//            switch (eventID)
//            {
//                case EventID.IAPResultBeform:

//                    break;
//                case EventID.IAPResultAfter:

//                    break;
//            }
//        }

//        public void AddProduct()
//        {
//            foreach (var v in GameEntry.Data.GetAllIAPData())
//            {
//                IAPList.Add(new IAPData(v.ProductID, (ProductType)v.ProductType, v.Price, "$" + v.Price, v.ProductID, v.Diamond, null));
//            }
//            HWIAPManager.Instance.Init(IAPList);
//        }

//        private void OnInitSuccessEvent()
//        {
//#if UNITY_ANDROID
//            HWIAPManager.Instance.RestorePurchase();
//#endif
//        }

//        private void OnPurchaseRestoreResultEvent(bool obj)
//        {
//            GameEntry.Tips.ShowOrHidePuchasing(false);
//        }

//        /// <summary>
//        /// 购买成功，参数为商品，根据商品类型获得对应奖励
//        /// </summary>
//        /// <param name="data">商品信息</param>
//        private void OnPurchaseRewardUserEvent(IAPData data)
//        {

//        }

//        /// <summary>
//        /// 购买失败事件，提示用户
//        /// </summary>
//        /// <param name="obj">商品id</param>
//        private void OnPurchaseFailedEvent(string obj)
//        {
//            GameEntry.Tips.ShowOrHidePuchasing(false);
//            MyIAPID iAPID = Enum.Parse<MyIAPID>(GameEntry.Data.GetID(obj));
//            GameEntry.Event.Send(EventID.IAPResultAfter, false, iAPID);
//        }

//        /// <summary>
//        /// 购买成功事件，提示用户
//        /// </summary>
//        /// <param name="obj">商品id</param>
//        private void OnPurchaseSuccessEvent(string obj)
//        {
//            GameEntry.Tips.ShowOrHidePuchasing(false);
//            MyIAPID iAPID = Enum.Parse<MyIAPID>(GameEntry.Data.GetID(obj));
//            GameEntry.Event.Send(EventID.IAPResultBeform, false, iAPID);
//            GameEntry.GameData.SetBool("Product" + iAPID.ToString(), true);
//            GameEntry.Event.Send(EventID.IAPResultAfter, true, iAPID);
//        }

//        /// <summary>
//        /// 延迟购买事件，提示用户
//        /// </summary>
//        /// <param name="obj">商品id</param>
//        private void OnPurchasePendingEvent(string obj)
//        {

//        }

//        /// <summary>
//        /// 内购状态改变事件，刷新内购界面
//        /// </summary>
//        private void OnPurchaseStateChangeEvent()
//        {

//        }

//        /// <summary>
//        /// 打开内购窗口的时候调用，检测内购是否初始化
//        /// </summary>
//        public void CheckIAPInit()
//        {
//            HWIAPManager.Instance.CheckInit(IAPList);
//        }

//        /// <summary>
//        /// 通过商品ID获取物品信息
//        /// </summary>
//        /// <param name="id">商品ID</param>
//        /// <returns>商品信息</returns>
//        IAPData GetIAPData(MyIAPID id)
//        {
//            return HWIAPManager.Instance.GetIAPData(GameEntry.Data.GetMyIAPData(id).ProductID);
//        }

//        /// <summary>
//        /// 购买商品
//        /// </summary>
//        /// <param name="id">商品ID</param>
//        public void Purchase(MyIAPID id)
//        {
//            if (UIGM.Instance.isFreeIAP)
//            {
//                LogKit.I("GM免内购,直接发放奖励:" + id);
//                OnPurchaseSuccessEvent(GameEntry.Data.GetMyIAPData(id).ProductID);
//                return;
//            }
//            GameEntry.Tips.ShowOrHidePuchasing(true);
//            HWIAPManager.Instance.Purchase(GameEntry.Data.GetMyIAPData(id).ProductID);
//        }

//        /// <summary>
//        /// 恢复购买
//        /// </summary>
//        public void RestorePurchase()
//        {
//            GameEntry.Tips.ShowOrHidePuchasing(true);
//            HWIAPManager.Instance.RestorePurchase();
//        }

//        /// <summary>
//        /// 获取所有内购物品信息
//        /// </summary>
//        public List<IAPData> GetIAPList()
//        {
//            return HWIAPManager.Instance.IAPList;
//        }

//        /// <summary>
//        /// 获取价格
//        /// </summary>
//        /// <param name="id">商品id</param>
//        /// <returns></returns>
//        public string GetPrice(MyIAPID id)
//        {
//            return GetIAPData(id).desc.ToString();
//        }

//        /// <summary>
//        /// 是否购买了去广告
//        /// </summary>
//        /// <returns></returns>
//        public bool IsNoAds()
//        {
//            return IsPurchased(MyIAPID.去广告);
//        }

//        /// <summary>
//        /// 是否购买了商品
//        /// </summary>
//        /// <param name="id">商品id</param>
//        /// <returns></returns>
//        public bool IsPurchased(MyIAPID id)
//        {
//            return GameEntry.GameData.GetBool("Product" + id.ToString(), false);
//        }
//    }
//}